//
//  HomeTableViewController.swift
//  云Sir的微博
//
//  Created by 赵云 on 15/10/16.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit

class HomeTableViewController: BaseTableViewController {
    
    /// 微博数据数组
    var statuses: [Status]?{
        didSet{
            //刷新数据
            tableView.reloadData()
           
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        if !UserAccount.userLogon{
        visitorView?.setupIconInfo(false, imageName: "visitordiscover_feed_image_smallicon", message: "关注一些人，回这里看看有什么惊喜")
        }
        
        //添加refresh控件
        refreshControl = UIRefreshControl()
        //添加视图
        let v = UIView(frame: CGRect(x: 0, y: 0, width: 360, height: 20))
        v.backgroundColor = UIColor.redColor()
        refreshControl?.addSubview(v)
        //隐藏默认的转轮
        refreshControl?.tintColor = UIColor.clearColor()
        //监听方法
        refreshControl?.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
        
        prepareTableView()

        loadData()
    }
    
    /// 准备表格视图
    private func prepareTableView() {
        
        // 注册原型 cell
        // rawValue 返回枚举对应实际数值
        tableView.registerClass(StatusNormalCell.self, forCellReuseIdentifier: StatusCellIdentifier.NormalCell.rawValue)
        tableView.registerClass(StatusForwardCell.self, forCellReuseIdentifier: StatusCellIdentifier.ForwardCell.rawValue)
//        // 设置表格的预估行高(方便表格提前计算预估行高，提高性能)
        tableView.estimatedRowHeight = 300
//
//        // 设置表格自动计算行高
//        tableView.rowHeight = UITableViewAutomaticDimension
//        tableView.rowHeight = 300
        // 取消分割线
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        
    }
    
    
    /// 加载数据
    func loadData() {
        Status.loadStatus {[weak self] (dataList, error) -> () in
            
            if(error != nil){
                
                print(error)
                
                return
            }
            
            self?.statuses = dataList
            
        }
    }
    
    
    //MARK: - 数据源方法
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return statuses?.count ?? 0
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        // 根据微博类型，选取不同的 ID
        let status = statuses![indexPath.row]
        
        let cell = tableView.dequeueReusableCellWithIdentifier(StatusCellIdentifier.cellId(status), forIndexPath: indexPath) as! StatusCell
        
        cell.status = statuses![indexPath.row]
        
        return cell
        
        
    }
    /// 返回行高 － 如果是固定值，可以直接通过属性设置，效率更高
    /**
    行高缓存
    1. NSCache - 内存缓存，iOS 8.0 有 bug，千万不要 removeAll，一旦 removeAll 之后，再也没法使用了
    SDWebImage 存在什么问题
    1> 接收到内存警告后，内存缓存实效
    2> 加载 GIF 的时候，内存会狂飙！
    2. 自定义行高`缓存字典`
    3. 直接利用微博的`模型` - 行高数据只是一个小数，并不会有太大的内存消耗！
    不需要在控制器中，额外定义属性！
    
    提示：如果表格高度是固定的，一定不要通过代理返回行高！可以直接设置属性！
    */
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        
        // 判断模型中，是否已经缓存了行高
        // 1. 获取模型
        let status = statuses![indexPath.row]
        
        if let h = status.rowHeight {
            return h
        }
        
        // 2. 获取 cell - dequeueReusableCellWithIdentifier 带 indexPath 的函数会调用计算行高的方法
        // 会造成死循环，在不同版本的 Xcode 中 行高的计算次数不一样！尽量要优化！
        // 如果不做处理，会非常消耗性能！
        let cell = tableView.dequeueReusableCellWithIdentifier(StatusCellIdentifier.cellId(status)) as? StatusCell
        
        // 3. 记录并返回计算的行高
        status.rowHeight = cell!.rowHeight(status)
        
        return status.rowHeight!
    }



}
